import { set } from 'lodash-es'
import { $each } from '../index'
/**
 * 设置图表的样式区分
 * 1、雷达图
 * 2、其他图表
 * 3、散点图
 * 4、气泡/飞线地图
 * @param options
 */
// 图表设置样式
function handleEchartSeriesStyle(options) {
    const { seriesValue, generateOption, indexNeed, currentLegend, style, seriesIndex } = options
    seriesValue.map((dataItem, dataIndex) => {
        for (const key in generateOption) {
            $each(indexNeed, item => {
                // 当前遍历的原始字段名称为颜色维度 除了雷达图2其他的雷达图不配置条件格式
                if (currentLegend) {
                    // 条件选择的是颜色维度时，需判断seriesIndex，同一个颜色维度的数据都在一个 seriesItem中
                    seriesIndex === item && style[key] && set(dataItem, generateOption[key], style[key])
                } else {
                    // 则统一设置属性 设置的颜色不为空才执行
                    dataIndex === item && style[key] && set(dataItem, generateOption[key], style[key])
                }
            })
        }
        return dataItem
    })
}

function handleEchartSeriesStyle1(options) {
    const { seriesValue, indexNeed, seriesIndex } = options

    seriesValue.map((dataItem, dataIndex) => {
        $each(indexNeed, item => {
            const { currentYAxis, isExecute } = item
            if (!isExecute) {
                return
            }
            const { currentLegend, generateOption, style } = item
            for (const key in generateOption) {
                // 当前遍历的原始字段名称为颜色维度 除了雷达图2其他的雷达图不配置条件格式
                if (currentLegend) {
                    // 条件选择的是颜色维度时，需判断seriesIndex，同一个颜色维度的数据都在一个 seriesItem中
                    seriesIndex === item.valueIndex && style[key] && set(dataItem, generateOption[key], style[key])
                } else {
                    // 则统一设置属性 设置的颜色不为空才执行
                    dataIndex === item.valueIndex && style[key] && set(dataItem, generateOption[key], style[key])
                }
            }
        })
        return dataItem
    })
}

// 雷达图设置样式
function handleRadarSeriesStyle(options) {
    const { seriesValue, generateOption, style, indexNeed, seriesIndex, currentLegend, currentYAxis } = options
    const data = seriesValue[0]
    for (const key in generateOption) {
        $each(indexNeed, item => {
            if (currentLegend || currentYAxis) {
                // 条件选择的是颜色维度时，需判断seriesIndex，同一个颜色维度的数据都在一个 seriesItem中
                seriesIndex === item && style[key] && set(data, generateOption[key], style[key])
            } else {
                // 判断当前的数据组中值是否存在
                const existValue = data.value[item]
                // 如果是维度，由于雷达图是共用维度，所以如果满足条件的下标值存在说明所有数据都满足
                existValue && style[key] && set(data, generateOption[key], style[key])
            }
        })
    }
}
function handleRadarSeriesStyle1(options) {
    // const { seriesValue, generateOption, style, indexNeed, seriesIndex, currentLegend, currentYAxis } = options;
    const { seriesValue, indexNeed, seriesIndex } = options
    const data = seriesValue[0]
    $each(indexNeed, item => {
        const { currentLegend, generateOption, style, currentYAxis, isExecute } = item
        if (!isExecute) {
            return
        }
        for (const key in generateOption) {
            if (currentLegend) {
                // 条件选择的是颜色维度时，需判断seriesIndex，同一个颜色维度的数据都在一个 seriesItem中
                seriesIndex === item && style[key] && set(data, generateOption[key], style[key])
            } else {
                // 判断当前的数据组中值是否存在
                const existValue = data.value[item.valueIndex]
                // 如果是维度，由于雷达图是共用维度，所以如果满足条件的下标值存在说明所有数据都满足
                existValue && style[key] && set(data, generateOption[key], style[key])
            }
        }
    })
}
// 气泡、飞线地图
function handleScatterMapSeriesStyle(options) {
    const { seriesValue, generateOption, indexNeed, style } = options
    seriesValue.data.map((dataItem, dataIndex) => {
        for (const key in generateOption) {
            $each(indexNeed, item => {
                // 则统一设置属性 设置的颜色不为空才执行
                dataIndex === item && style[key] && set(dataItem, generateOption[key], style[key])
            })
        }
        return dataItem
    })
}
export const setSeriesConditionStyle = {
    default: handleEchartSeriesStyle,
    radar: handleRadarSeriesStyle,
    scatter: handleEchartSeriesStyle,
    scatterMap: handleScatterMapSeriesStyle
}

export const setSeriesConditionStyle1 = {
    default: handleEchartSeriesStyle1,
    radar: handleRadarSeriesStyle1,
    scatter: handleEchartSeriesStyle,
    scatterMap: handleScatterMapSeriesStyle
}
